<?php
error_reporting(0);
ini_set("memory_limit","-1");
$commands=getopt('h:f:d:s:n:l:i:m:z:c:j:v:b:');
$name='HutAV';
$ver='1.0.0';
$prog_dir='C:\hAV';
$filtermd='hashes_list';
$filtersd='domains_list';
if(strpos(php_uname(),'Windows')!==false){
	$sobs="\\";
}else{
	$sobs='/';
}
if($commands['h']=="c"){
	echo "$name -------------------------------------------------------------------------------------------\n";
	echo "-h c                       Команды\n";
	echo "-f [имя файла]             Сканировать файл\n";
	echo "-d [директория]            Сканировать все файлы на выбранном директории\n";
	echo "-s cd                      Сканировать все файлы на текущем директории\n";
	echo "-n [домен или IP]          Сканировать веб-сайт\n";
	echo "-l [файл списка доменов]   Сканировать веб-сайты из списка доменов\n";
	echo "-i sigs                    Информация о списков хэшов от вредоносных файлов, вредоносных сайтов\n";
	echo "-m [хэш MD5]               Сканировать хэш MD5\n";
	echo "-z [файл списка хэшов]     Сканировать хэши файлов MD5 из списка хэшов MD5\n";
	echo "-с delinfected             При сканировании удалять вредоносные файлы\n";
	echo "-j                         Отключить лог сканирования\n";
	echo "-v prog                    Версия программы\n";
	die();
}
if(isset($commands['b'])){
    if(strpos(php_uname(),'Windows')!==false){

    }else{
    	echo "Ошибка антивируса: Это только для Windows!";
		die();
	}
	$filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
    fclose($filter);
	$md5 = md5_file($commands['b']);
	if(empty($md5)){
        system("mshta \"javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Файл не найден', 10, '$name', 64 );close()\"");
		die();
	}
	if(strpos($filterc,$md5)!==false){
		system("mshta \"javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Файл [".basename($commands['b'])."] вредоносный\\nMD5-хэш файла: ".$md5."', 10, '$name', 64 );close()\"");
	}else{
		system("mshta \"javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Файл [".basename($commands['b'])."] чистый\\nMD5-хэш файла: ".$md5."', 10, '$name', 64 );close()\"");
	}
	die();
}
if($commands['v']=='prog'){
	echo $name.' '.$ver;
	die();
}
if(isset($commands['z'])){
	$filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
    fclose($filter);
	$infected = 0;
	$clean = 0;
	$list = file($commands['z']);
	if(isset($commands['j'])==false){
	   $log = "Дата сканирования: ".date("Y-m-d h:i:s")."\n";
	   $log .= "-----------------------------------------------------\n";
	}
	foreach($list as $hash){
	  $hash = preg_replace('~[\r\n]+~','',$hash);
	  $hash = strtolower($hash);
      if(preg_match('/^[a-f0-9]{32}$/i', $hash)){
	    if(strpos($filterc,$hash)!==false){
	    	  echo "Хэш файла [".$hash."] - опасен\n";
			  if(isset($commands['j'])==false){
			    $log .= "Хэш файла [".$hash."] - опасен\n";
			  }
			  $infected++;
	    }else{
	    	  echo "Хэш файла [".$hash."] - чистый\n";
			  if(isset($commands['j'])==false){
			    $log .= "Хэш файла [".$hash."] - чистый\n";
			  }
			  $clean++;
	    }
	  }
    }
	if(isset($commands['j'])==false){
	   $log .= "-----------------------------------------------------\n";
	   $log .= "Найдено $infected опасных хэшов\n";
	   $log .= "        $clean чистых хэшов\n";
	   $logf = fopen($prog_dir.$sobs.'dav_scan.log','w') or die('Ошибка антивируса: Не удалось создать лог сканировании');
       fwrite($logf,$log);
       fclose($logf);
	   echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
	}
	echo "Найдено $infected опасных хэшов\n";
	echo "        $clean чистых хэшов\n";
	die();
}
if(isset($commands['m'])){
	$filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
    fclose($filter);
	if(strpos($filterc,$commands['m'])!==false){
		echo "Хэш файла [".$commands['m']."] - опасен\n";
	}else{
		echo "Хэш файла [".$commands['m']."] - безопасен\n";
	}
	die();
}
if($commands['i']=='sigs'){
	echo "Список хэшов от вредоносных файлов\n";
	echo "В списке: ".number_format(count(file($prog_dir.$sobs.$filtermd)))." хэшов\n\n";
	echo "Список вредоносных сайтов\n";
	echo "В списке: ".number_format(count(file($prog_dir.$sobs.$filtersd)))." доменов";
	die();
}
if(isset($commands['l'])){
	$filter = fopen($prog_dir.$sobs.$filtersd,'r')or die('Ошибка антивируса: Не удалось открыть базу вредоносных сайтов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtersd));
    fclose($filter);
	$list = file($commands['l']);
	$dangerous = 0;
	$clean = 0;
	foreach($list as $domain){
	  $domain = str_replace('www.','',$domain);
	  $domainws = preg_replace('~[\r\n]+~','',$domain);
	  $domainws = strtolower($domainws);
      if(preg_match('/([a-zA-Z0-9\-_]+\.)?[a-zA-Z0-9\-_]+\.[a-zA-Z]{2,5}/',$domainws)){
	    if(strpos($filterc,$domainws)!==false){
	    	  echo "Сайт [".$domainws."] - опасен\n";
			  if(isset($commands['j'])==false){
			     $log .= "Сайт [".$domainws."] - опасен\n";
			  }
			  $dangerous++;
	    }else{
	    	  echo "Сайт [".$domainws."] - безопасен\n";
			  if(isset($commands['j'])==false){
			     $log .= "Сайт [".$domainws."] - безопасен\n";
			  }
			  $clean++;
	    }
	  }elseif(filter_var($domainws,FILTER_VALIDATE_IP)){
	    if(strpos($filterc,$domainws)!==false){
	    	  echo "Сайт [".$domainws."] - опасен\n";
			  if(isset($commands['j'])==false){
			     $log .= "Сайт [".$domainws."] - опасен\n";
			  }
			  $dangerous++;
	    }else{
	    	  echo "Сайт [".$domainws."] - безопасен\n";
			  if(isset($commands['j'])==false){
			     $log .= "Сайт [".$domainws."] - безопасен\n";
			  }
			  $clean++;
	    }
	  }
    }
	if(isset($commands['j'])==false){
	   $log .= "-----------------------------------------------------\n";
	   $log .= "Найдено $dangerous опасных сайтов\n";
	   $log .= "        $clean безопасных сайтов\n";
	   $logf = fopen($prog_dir.$sobs.'dav_scan.log','w') or die('Ошибка антивируса: Не удалось создать лог сканировании');
       fwrite($logf,$log);
       fclose($logf);
	   echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
	}
	echo "Найдено $dangerous опасных сайтов\n";
	echo "        $clean безопасных сайтов\n";
	die();
}
if(isset($commands['n'])){
	$filter = fopen($prog_dir.$sobs.$filtersd,'r')or die('Ошибка антивируса: Не удалось открыть базу вредоносных сайтов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtersd));
    fclose($filter);
	$commands['n'] = strtolower($commands['n']);
	if(strpos($filterc,$commands['n'])!==false){
		echo "Сайт [".$commands['n']."] - опасен\n";
	}else{
		echo "Сайт [".$commands['n']."] - безопасен\n";
	}
	die();
}
if(isset($commands['f'])){
	$filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
    fclose($filter);
	$md5 = md5_file($commands['f']);
	if(empty($md5)){
		echo "Ошибка антивируса: Файл не найден.";
		die();
	}
	if(strpos($filterc,$md5)!==false){
		echo "Файл [".basename($commands['f'])."] - вредоносный\n";
		if($commands['c']=="delinfected"){
		  unlink($commands['f']);
		}
	}else{
		echo "Файл [".basename($commands['f'])."] - чистый\n";
	}
	echo "MD5-хэш файла: ".$md5;
	die();
}
if($commands['s']=='cd'){
	$filter = fopen($prog_dir.$sobs.$filtermd,'r') or die('Ошибка антивируса: Не удалось открыть базу вирусов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
    fclose($filter);
	$infected = 0;
	$clean = 0;
	$files = array_filter(glob('*'),'is_file');
	if(isset($commands['j'])==false){
	  $log = "Сканировано ".count($files)." файлов, в директории: ".getcwd()."\nДата сканирования: ".date("Y-m-d h:i:s")."\n";
	  $log .= "-----------------------------------------------------\n";
	}
	foreach($files as $file){
	   $md5 = md5_file($file);
	   if(strpos($filterc,$md5)!==false){
	   	    echo "Файл [".basename($file)."] - вредоносный\n";
			if(isset($commands['j'])==false){
			  $log .= "Файл [".basename($file)."] - вредоносный\n";
			}
			if($commands['c']=="delinfected"){
			  unlink(getcwd().$sobs.$file);
			}
			$infected++;
	   }else{
		    echo "Файл [".basename($file)."] - чистый\n";
			if(isset($commands['j'])==false){
			  $log .= "Файл [".basename($file)."] - чистый\n";
			}
			$clean++;
	   }
	}
	if(isset($commands['j'])==false){
	  $log .= "-----------------------------------------------------\n";
	  $log .= "Найдено $infected вредоносных файлов\n";
	  $log .= "        $clean чистых файлов\n";
	  $logf = fopen($prog_dir.$sobs."dav_scan.log","w") or die('Ошибка антивируса: Не удалось создать лог сканировании');
      fwrite($logf,$log);
      fclose($logf);
	}
	echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
	echo "Найдено $infected вредоносных файлов\n";
	echo "        $clean чистых файлов\n";
	die();
}
if(isset($commands['d'])){
	$filter = fopen($prog_dir.$sobs.$filtermd,'r') or die('Ошибка антивируса: Не удалось открыть базу вирусов');
    $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
    fclose($filter);
	$infected = 0;
	$clean = 0;
	$files = array_filter(glob($commands['d'].$sobs.'*'),'is_file');
	if(isset($commands['j'])==false){
	   $log = "Сканировано ".count($files)." файлов, в директории: ".$commands['d']."\nДата сканирования: ".date("Y-m-d h:i:s")."\n";
	   $log .= "-----------------------------------------------------\n";
	}
	foreach($files as $file){
	   $md5 = md5_file($file);
	   if(strpos($filterc,$md5)!==false){
	   	    echo "Файл [".basename($file)."] - вредоносный\n";
			if(isset($commands['j'])==false){
			  $log .= "Файл [".basename($file)."] - вредоносный\n";
			}
			if($commands['c']=="delinfected"){
			  unlink($file);
			}
			$infected++;
	   }else{
		    echo "Файл [".basename($file)."] - чистый\n";
			if(isset($commands['j'])==false){
			  $log .= "Файл [".basename($file)."] - чистый\n";
			}
			$clean++;
	   }
	}
	if(isset($commands['j'])==false){
	   $log .= "-----------------------------------------------------\n";
	   $log .= "Найдено $infected вредоносных файлов\n";
	   $log .= "        $clean чистых файлов\n";
	   $logf = fopen($prog_dir.$sobs.'dav_scan.log','w') or die('Ошибка антивируса: Не удалось создать лог сканировании');
       fwrite($logf,$log);
       fclose($logf);
	   echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
	}
	echo "Найдено $infected вредоносных файлов\n";
	echo "        $clean чистых файлов\n";
	die();
}
?>